home *** CD-ROM | disk | FTP | other *** search
/ Best of Shareware / Best of PC Windows Shareware 1.0 - Wayzata Technology (7111) (1993).iso / mac / ZIPPED / DOS / GRAPHICS / MASWED.ZIP / BOX.ASM next >
Assembly Source File  |  1992-07-15  |  3KB  |  110 lines

  1. ;BOX.ASM
  2. ;TB syntax för att rita en ruta på skärmen
  3. ;   call    plot    (column%,wid%,heig%,x%,y%,col%)
  4. ;   sub plot    inline
  5. ;       $inline "box.bin"
  6. ;   end sub     
  7. .286
  8. pixseg1 equ 0A000h      ;segment för displayminnet <64k
  9. pixseg2 equ 0B000h      ;          "               >64k    
  10. col equ 6               ;stackoffset färg
  11. y   equ 10              ;    "       y-koordinat
  12. x   equ 14              ;    "       x-koordinat
  13. heig    equ 18          ;    "       höjd
  14. wid equ 22              ;    "       bitmask (OBS!) i låga byten
  15. column  equ 26          ;    "       columner (byte) bildbredd
  16. code segment
  17.     assume  cs:code
  18.     
  19.     push    bp          ;save base pointer
  20.     mov bp,sp           ;move stack pointer to bp
  21.     push    ds
  22.  
  23.     mov dx,3CEh     
  24.     mov ax,0F01h        ;alla färgplan till
  25.     out dx,ax           ;skriv Fh till enable set/reset reg
  26.     mov al,0        
  27.     lds di,[bp+col] 
  28.     mov ah,byte ptr ds:[di] 
  29.     out dx,ax           ;skriv col till set/reset reg
  30.  
  31.     lds di,[bp+x]
  32.     mov ax,ds:[di]      ;ladda x-koordinaten
  33.     mov cx,ax           ;spara x i cx
  34.     shr ax,3            ;x1=x/8
  35.     mov bx,ax           ;spara x1 i bx
  36.     and cx,7            ;isolera 3 lägsta bitar i cl
  37.     lds di,[bp+wid]
  38.     mov ax,ds:[di]
  39.     ror ax,cl           ;skifta höger cl steg
  40.     push    ax          ;spara den andra bitmasken
  41.     mov ah,al
  42.     mov al,8        
  43.     out dx,ax           ;skriv mask till bit mask reg
  44.  
  45.     lds di,[bp+column]
  46.     mov ax,ds:[di]
  47.     mov cx,ax           ;spara column i cx
  48.     lds di,[bp+y]
  49.     mov ax,ds:[di]      ;ladda y-koordinaten
  50.     mul cx              ;column*y (1 i dx om>64k)
  51.     add ax,bx           ;column*y+x1
  52.     mov si,ax           ;offset 
  53.     push    si          ;spara adressen
  54.  
  55.     mov bx,cx           ;spara column i bx
  56.     lds di,[bp+heig]
  57.     mov cx,ds:[di]
  58.     push    cx          ;spara höjden
  59.  
  60.     shl dx,12           ;1000h om dx=1
  61.     mov ax,pixseg1
  62.     add ax,dx           ;addera 1000h om adr>64k
  63.     mov ds,ax           ;segment
  64.     push    ds          ;spara segmentpekaren
  65.  
  66. vert1:
  67.     or  ds:si,al
  68.     mov ax,si
  69.     add ax,bx           ;nästa rad, addera columnvärdet
  70.     jnc lab1
  71.     mov dx,pixseg2      ;>64k
  72.     mov ds,dx
  73. lab1:
  74.     mov si,ax
  75.     loop    vert1
  76.  
  77.     pop ds              ;återställ segmentpekaren
  78.     pop cx              ;återställ höjden
  79.     pop si              ;återställ adressen
  80.     pop ax              ;läs tillbaka bitmasken
  81.     mov al,8
  82.     mov dx,3CEh
  83.     out dx,ax           ;sätt den andra bitmasken
  84.     mov ax,si
  85.     add ax,1            ;byten till höger adresseras
  86.     mov si,ax
  87.  
  88. vert2:
  89.     or  ds:si,al
  90.     mov ax,si
  91.     add ax,bx           ;nästa rad, addera columnvärdet
  92.     jnc lab2
  93.     mov dx,pixseg2      ;>64k
  94.     mov ds,dx
  95. lab2:
  96.     mov si,ax
  97.     loop    vert2
  98.  
  99.     mov dx,3CEh         ;återställ vissa register
  100.     mov ax,0FF08h       ;återställ med FF   
  101.     out dx,ax           ;skriv till bit mask reg
  102.     mov ax,0001h        ;återställ med 0
  103.     out dx,ax           ;skriv till enable set/reset reg
  104.  
  105.     pop ds
  106.     pop bp
  107.  
  108. code ends
  109. end
  110.